/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerInformes;
import AccesoDatos.Persistencia.Manager.ManagerMulta;
import AccesoDatos.Persistencia.Manager.ManagerUsuario;
import GUI.Bibliotecario.AdminPrestamos.PanelCancelarDeuda;
import LogicaNegocio.Biblioteca.Ejemplar;
import LogicaNegocio.Usuarios.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite el control de eventos generados
 * desde el panel cancelar deuda.
 *
 * @author sebaxtian
 * Archivo: ControlCancelarDeuda.java
 * @version 1.0
 * Fecha: dom jun  6 21:54:57 COT 2010
 */


public class ControlCancelarDeuda {

    //Atributos de clase
    private PanelCancelarDeuda panelCancelarDeuda;
    private ManagerInformes gestorInformes;
    private ManagerMulta gestorMulta;
    private ManagerUsuario gestorUsuario;
    private Usuario usuarioDeudor;

    public ControlCancelarDeuda(PanelCancelarDeuda panelCancelarDeuda) {
        this.panelCancelarDeuda = panelCancelarDeuda;
        gestorInformes = new ManagerInformes();
        gestorMulta = new ManagerMulta();
        gestorUsuario = new ManagerUsuario();
    }

    public void buscarUsuario() {
        int identificacionUsuario = -1;
        int valorDeuda = 0;
        Usuario usuario = null;
        try{
            identificacionUsuario = Integer.parseInt(panelCancelarDeuda.textFieldCedula.getText());
            usuario = gestorUsuario.obtenerUsuario(identificacionUsuario);
            valorDeuda = gestorInformes.obtenerValorMulta(identificacionUsuario);
            panelCancelarDeuda.textFieldPrimerApellido.setText(usuario.getPrimerApellido());
            panelCancelarDeuda.textFieldPrimerNombre.setText(usuario.getPrimerNombre());
            panelCancelarDeuda.textFieldSegundoApellido.setText(usuario.getSegundoApellido());
            panelCancelarDeuda.textFieldSegundoNombre.setText(usuario.getSegundoNombre());
            panelCancelarDeuda.textFieldValorMulta.setText(valorDeuda+"");
            mostrarEjemplaresDeUsuario(usuario);
            usuarioDeudor = usuario;
        } catch(NumberFormatException exc) {
            JOptionPane.showMessageDialog(panelCancelarDeuda, "El numero de cedula debe ser un numero entero", "Cancelar Deuda", JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(panelCancelarDeuda, ex.getMessage(), "Cancelar Deuda", JOptionPane.INFORMATION_MESSAGE);
            limpiar();
        }
    }

    public void cancelarDeuda() {
        if(usuarioDeudor != null) {
            boolean cancelada = gestorMulta.cancelarValorMulta(usuarioDeudor.getIdentificacionUsuario());
            if(cancelada){
                JOptionPane.showMessageDialog(panelCancelarDeuda, "El valor de la deuda fue cancelada con exito", "Cancelar Deuda", JOptionPane.INFORMATION_MESSAGE);
                limpiar();
            }else{
                JOptionPane.showMessageDialog(panelCancelarDeuda, "El valor de la deuda no fue cancelada", "Cancelar Deuda", JOptionPane.INFORMATION_MESSAGE);
                limpiar();
            }
        }else{
            JOptionPane.showMessageDialog(panelCancelarDeuda, "El usuario no ha sido buscado", "Cancelar Deuda", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void mostrarEjemplaresDeUsuario(Usuario usuario) {
        List<Ejemplar> listaEjemplares = new ArrayList<Ejemplar>();
        listaEjemplares = gestorInformes.obtenerEjemplaresPrestadosA(usuario.getIdentificacionUsuario());
        Ejemplar ejemplar;
        for(int i = 0; i < listaEjemplares.size(); i++){
            if(panelCancelarDeuda.tablaEjemplares.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelCancelarDeuda.tablaEjemplares.getModel();
                Object fila[] = {"","","","",""};
                tmp.addRow(fila);
            }
            ejemplar =  listaEjemplares.get(i);
            panelCancelarDeuda.tablaEjemplares.setValueAt(ejemplar.getNumeroSala(), i, 0);
            panelCancelarDeuda.tablaEjemplares.setValueAt(ejemplar.getNumeroPasillo(), i, 1);
            panelCancelarDeuda.tablaEjemplares.setValueAt(ejemplar.getNumeroEstante(), i, 2);
            panelCancelarDeuda.tablaEjemplares.setValueAt(ejemplar.getNumeroCajon(), i, 3);
            panelCancelarDeuda.tablaEjemplares.setValueAt(gestorInformes.ejemplarVencido(ejemplar.getIdEjemplar()), i, 4);
        }
    }

    private void limpiar() {
        panelCancelarDeuda.textFieldCedula.setText("");
        panelCancelarDeuda.textFieldPrimerApellido.setText("");
        panelCancelarDeuda.textFieldPrimerNombre.setText("");
        panelCancelarDeuda.textFieldSegundoApellido.setText("");
        panelCancelarDeuda.textFieldSegundoNombre.setText("");
        panelCancelarDeuda.textFieldValorMulta.setText("");
        limpiarTablaEjemplares();
    }

    private void limpiarTablaEjemplares() {
        DefaultTableModel tmp = (DefaultTableModel)panelCancelarDeuda.tablaEjemplares.getModel();
        for(int i = 0; i < panelCancelarDeuda.tablaEjemplares.getRowCount(); i++){
            tmp.removeRow(i);
            if(tmp.getRowCount()>0){
                limpiarTablaEjemplares();
            }
        }
    }
}
